package com.leinao.dataset.dao;

import com.leinao.dataset.dto.PaiDataSetDto;
import com.leinao.dataset.dto.UserInfoDto;
import com.leinao.dataset.model.PaiDataSet;
import com.leinao.dataset.model.PaiObjectFileRelation;
import com.leinao.dataset.model.PaiUserDatasetRelation;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;

import com.sun.org.apache.xpath.internal.operations.Bool;
import io.swagger.models.auth.In;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface PaiDataSetMapper {

	/**
	  * @Description 	添加数据集
	  * @param record	数据集信息
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/4/22 16:21
	  */
    int insert(PaiDataSet record);

    /**
      * @Description  根据Id查询数据集
      * @param id	数据集ID
      * @return
      * @author:    weiwei
      * @Date:  2019/4/22 16:21
      */
    PaiDataSet selectByPrimaryKey(Long id);

    /**
      * @Description  修改数据集
      * @param record	数据集信息
      * @return
      * @author:    weiwei
      * @Date:  2019/4/22 16:22
      */
    int updateByPrimaryKeySelective(PaiDataSet record);

    /**
      * @Description 	根据用户ID获取数据集
      * @param userId	用户ID
      * @return
      * @author:    weiwei
      * @Date:  2019/4/22 16:22
      */
    List<PaiDataSetDto> getDataSetInfo(String userId);

    /**
      * @Description 	保存数据集
      * @param dataSet	数据集信息
      * @return
      * @author:    weiwei
      * @Date:  2019/4/22 16:22
      */
	int pushDataSet(PaiDataSetDto dataSet) throws MySQLIntegrityConstraintViolationException;

	/**
	 * @Description 	修改数据集信息
	 * @param dataSet  数据集信息
	 * @return
	 * @author wangshoufa
	 * @date 2018年11月20日 上午10:21:47
	 */
	int updateDataSetByNumber(PaiDataSetDto dataSet);

	/**
	 * @Description 获取数据集公开的用户ID列表
	 * @param datasetId : 数据集ID
	 * @author lizi
	 * @date 2018/11/19 上午11:32
	 */
	List<String> selectUserIdListByDatasetId(Long datasetId);

	/**
	 * @Description 删除用户数据集关系
	 * @param datasetId : 数据集ID
	 * @param userIdList : 用户ID列表
	 * @author lizi
	 * @date 2018/11/19 上午11:32
	 */
    void deleteUserDatasetRelation(@Param("datasetId") Long datasetId, @Param("userIdList") List<String> userIdList);

    /**
     * @Description 新增用户数据集关系
     * @param userDatasetRelationList : 用户数据集关系集合
     * @author lizi
     * @date 2018/11/19 上午11:32
     */
    void batchInsertUserDatasetRelation( @Param("userDatasetRelationList") List<PaiUserDatasetRelation> userDatasetRelationList);

    /**
      * @Description 新增文件数据集关系
      * @param list  文件数据集关系集合
      * @return
      * @author:    weiwei
      * @Date:  2019/4/22 16:19
      */
	int batchInsertObjFileRelation(@Param("list") List<PaiObjectFileRelation> list);

	/**
	 * @Description 获取公开数据集列表
	 * @param categoryId : 分类ID
	 * @param userId : 用户ID
	 * @author lizi
	 * @date 2018/11/22 下午8:05
	 */
	List<PaiDataSetDto> getPublicDataSetList(@Param("categoryId") Long categoryId, @Param("userId") String userId);

    /**
     * @Description 获取公开数据集项目使用次数
	 * @param dataSetIdList : 数据集ID列表
	 * @param userId : 用户ID
     * @author lizi
     * @date 2018/11/22 下午8:05
     */
    List<PaiDataSetDto> getPublicDataSetProjectCountList(@Param("dataSetIdList") List<Long> dataSetIdList,
														 @Param("userId") String userId);
    /**
     * 获取用户创建项目时选择的数据集
     * @param userId  用户Id
     * @return
     * @author wangshoufa
     * @date 2018年11月27日
     *
     */
	List<PaiDataSetDto> optionalDataSet(@Param("search") String search, @Param("userId") String userId);

	/**
	  * @Description 	获取数据集明细
	  * @param userId	用户Id
	  * @param number	当前数据集的编号
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/4/22 16:20
	  */
	PaiDataSetDto dataSetDetail(String userId, String number);

	/**
	 * @Description 删除项目数据集关系
	 * @param datasetId : 数据集ID
	 * @param userIdList : 用户ID列表
	 * @author lizi
	 * @date 2018/11/19 上午11:32
	 */
	void deleteProjectDatasetRelation(@Param("datasetId") Long datasetId, @Param("userIdList") List<String> userIdList);

	/**
	  * @Description 获取公开数据集信息
	  * @param
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/4/22 16:21
	  */
	List<PaiDataSetDto> queryOpenDataSetInfo();

	/**
	 * @Description 获取项目数据集列表
	 * @param projectId : 项目ID
	 * @param userId : 用户ID
	 * @author lizi
	 * @return
	 */
	List<PaiDataSetDto> getProjectDataSetList(@Param("projectId") Long projectId, @Param("userId") String userId);

	/**
	 * @Description 获取公开数据集列表
	 * @param search : 搜索内容
	 * @param userId : 用户ID
	 * @author lizi
	 * @date 2018/11/22 下午8:05
	 */
	List<PaiDataSetDto> searchPublicDataSetList(@Param("search") String search, @Param("userId") String userId);

	/**
	 * @Description 获取数据集封面地址
	 * @param dataSetIdList : 数据集ID列表
	 * @author lizi
	 * @date 2019/02/27 下午2:05
	 */
	List<PaiDataSetDto> getDataSetCoverUrlList(@Param("dataSetIdList") List<Long> dataSetIdList);

	/**
	 * @Description 根据数据集名称获取数据集信息
	 * @param name 数据集名称
	 * @param userId	用户Id
	 * @return
	 */
	PaiDataSet getDataSetByName(@Param("name") String name, @Param("userId") String userId);

	/**
	 * @Description 数据集是否公开给个人用户
	 * @param dataSetId	数据集Id
	 * @return
	 * @author:    weiwei
	 * @Date:  2019/5/17 14:12
	 */
	Integer checkDataSetPublicPersonFlag(@Param("dataSetId") Long dataSetId);
	
	/**
	  * @Description 	获取数据集分享人员信息
	  * @param datasetId	数据集Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/18 11:09
	  */
	List<UserInfoDto> getDataSetSharingUserList(@Param("datasetId") Long datasetId);
	
	/**
	  * @Description 	添加用户关注数据集的中间表信息
	  * @param dataSetId	数据集Id
	  * @param attentionFlag	关注/取消关注标记
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/15 15:44
	  */
	Integer insertUserAttention(@Param("dataSetId") Long dataSetId, @Param("attentionFlag") Integer attentionFlag, @Param("userId") String userId);
	
	/**
	  * @Description 	删除用户关注数据集的中间表信息
	  * @param dataSetId	数据集Id
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/15 15:46
	  */
	Integer deleteUserAttention(@Param("dataSetId") Long dataSetId, @Param("userId") String userId);
	
	/**
	  * @Description 查询用户所有数据集
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/15 16:56
	  */
	List<PaiDataSetDto> getUserAllDataSet(@Param("userId") String userId);
	
	/**
	  * @Description	查询用户关注的数据集
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/15 16:56
	  */
	List<PaiDataSetDto> getUserAttentionDataSet(@Param("userId") String userId);

	/**
	  * @Description 	用户公开的数据集(不包含自己创建的)
	  * @param categoryId	标签Id
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/16 10:46
	  */
	List<PaiDataSetDto> optionalDataSetExceptOwn(@Param("categoryId") Long categoryId, @Param("userId") String userId);
	
	/**
	  * @Description 	获取用户与数据集关注的关系
	  * @param dataSetId	数据集Id
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/16 13:59
	  */
	Integer getUserAttentionStatus(@Param("dataSetId") Long dataSetId, @Param("userId") String userId);

	/**
	  * @Description 根据Id查询数据集
	  * @param dataSetId	数据集Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/16 15:14
	  */
	PaiDataSetDto getDataSetById(@Param("dataSetId") Long dataSetId);
	
	/**
	  * @Description 查询数据集关注人数
	  * @param dataSetId	数据集Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/16 16:46
	  */
	Integer getDataSetAttentionCount(@Param("dataSetId") Long dataSetId);

	
	/**
	  * @Description 	公开数据集列表,不包含其本人公开的和关注的
	  * @param userId	用户Id
	  * @return
	  * @author:    weiwei
	  * @Date:  2019/5/17 16:13
	  */
	List<PaiDataSetDto> optionalDataSetExceptOwnAndAttention(@Param("userId") String userId);

	String getDataSetProfile(@Param("dataSetId") Long dataSetId);

	Integer getUserDataSetPublicStatus(@Param("dataSetId") Long dataSetId, @Param("userId") String userId);

	String getUsername(@Param("dataSetId") Long dataSetId);

}